from app.extensions import db
from datetime import datetime

class User(db.Model):
    """用户表"""
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), unique=True, nullable=False)  # 用户名（唯一）
    password_hash = db.Column(db.LargeBinary(48), nullable=False)  # 存储盐+哈希（16+32=48字节）
    created_at = db.Column(db.DateTime, default=datetime.utcnow)  # 注册时间

class DetectionEvent(db.Model):
    """垃圾检测事件表（存储AI引擎的检测数据）"""
    __tablename__ = 'detection_events'
    id = db.Column(db.Integer, primary_key=True)
    class_ = db.Column('class', db.String(50), nullable=False)  # 垃圾类型（用class_避免关键字冲突）
    conf = db.Column(db.Float, nullable=False)                 # 置信度（0-1）
    x1 = db.Column(db.Float)
    y1 = db.Column(db.Float)
    x2 = db.Column(db.Float)
    y2 = db.Column(db.Float)                                   # 边界框坐标
    lat = db.Column(db.Float)                                  # 纬度
    lng = db.Column(db.Float)                                  # 经度
    street_name = db.Column(db.String(100))                    # 街道名（经纬度解析）
    timestamp = db.Column(db.String(50))                       # 视频时间戳
    frame_index = db.Column(db.Integer)                        # 帧索引
    detect_time = db.Column(db.DateTime, nullable=False)       # 检测时间

class StreetStats(db.Model):
    """街道统计表（用于前端可视化）"""
    __tablename__ = 'street_stats'
    id = db.Column(db.Integer, primary_key=True)
    street_name = db.Column(db.String(100), nullable=False)    # 街道名
    date = db.Column(db.Date, nullable=False)                  # 统计日期
    total_count = db.Column(db.Integer, default=0)             # 垃圾总数
    top_class = db.Column(db.String(50))                       # 最高频垃圾类型
    heatmap_data = db.Column(db.JSON)                          # 热力图数据（JSON格式）
#
    __table_args__ = (
        db.UniqueConstraint('street_name', 'date', name='unique_street_date'),
    )

    def __repr__(self):
        return f'<StreetStats {self.street_name} on {self.date}>'
#